package com.qianyucc.blog.utils;

import com.hankcs.hanlp.seg.common.*;
import com.hankcs.hanlp.tokenizer.*;
import com.qianyucc.blog.model.entity.*;
import com.qianyucc.blog.model.vo.*;

import java.time.*;
import java.time.format.*;
import java.util.*;
import java.util.stream.*;

/**
 * @author lijing
 * @date 2019-10-12 14:40
 * @description 整个项目的全局工具类
 */
public class Utils {
    /**
     * java8格式化日期
     *
     * @param millis  要格式化的时间戳
     * @param pattern 时间格式
     * @return 格式化之后的字符串
     */
    public static String formatDate(Long millis, String pattern) {
        if (millis == null || pattern == null) {
            return "";
        }
        Instant instant = Instant.ofEpochMilli(millis);
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        String format = localDateTime.format(DateTimeFormatter.ofPattern(pattern));
        return format;
    }

    /**
     * 将字符串分词
     *
     * @param str 要分词的短语
     * @return 分词之后词语集合
     */
    public static List<String> splitKeywords(String str) {
        List<String> list = new ArrayList<>();
        // 使用HanLP分词
        List<Term> termList = StandardTokenizer.segment(str);
        // 拼接正则字符串
        for (Term term : termList) {
            String word = term.word;
            list.add(word);
        }
        return list;
    }

    /**
     * 计算热门文章，权重计算：浏览数+评论数*5
     *
     * @param articleDOS 所有文章的集合
     * @return 热门文章集合
     */
    public static List<SimpleArticleVO> getHotArticles(List<ArticleDO> articleDOS) {
        return articleDOS.stream()
                .sorted(Comparator.comparingInt(article -> -(article.getViews())))
                .limit(5)
                .map(SimpleArticleVO::create)
                .collect(Collectors.toList());
    }
}